using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;

namespace XbmcConnect.Wcf
{

	[ServiceContract]
	internal interface Player
	{

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		PlayerGetActivePlayersResponse GetActivePlayers(PlayerGetActivePlayersRequest request);
	}

	[ServiceContract]
	internal interface AudioPlayer
	{

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerStateResponse State(AudioPlayerStateRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerPlayPauseResponse PlayPause(AudioPlayerPlayPauseRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerStopResponse Stop(AudioPlayerStopRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerSkipPreviousResponse SkipPrevious(AudioPlayerSkipPreviousRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerSkipNextResponse SkipNext(AudioPlayerSkipNextRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerBigSkipBackwardResponse BigSkipBackward(AudioPlayerBigSkipBackwardRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerBigSkipForwardResponse BigSkipForward(AudioPlayerBigSkipForwardRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerSmallSkipBackwardResponse SmallSkipBackward(AudioPlayerSmallSkipBackwardRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerSmallSkipForwardResponse SmallSkipForward(AudioPlayerSmallSkipForwardRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerRewindResponse Rewind(AudioPlayerRewindRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerForwardResponse Forward(AudioPlayerForwardRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerGetTimeResponse GetTime(AudioPlayerGetTimeRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerGetPercentageResponse GetPercentage(AudioPlayerGetPercentageRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioPlayerSeekTimeResponse SeekTime(AudioPlayerSeekTimeRequest request);
	}

	[ServiceContract]
	internal interface AudioLibrary
	{

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioLibraryGetArtistsResponse GetArtists(AudioLibraryGetArtistsRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		AudioLibraryScanForContentResponse ScanForContent(AudioLibraryScanForContentRequest request);
	}

	[ServiceContract]
	internal interface VideoLibrary
	{

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		VideoLibraryGetMoviesResponse GetMovies(VideoLibraryGetMoviesRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		VideoLibraryGetRecentlyAddedMoviesResponse GetRecentlyAddedMovies(VideoLibraryGetRecentlyAddedMoviesRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		VideoLibraryScanForContentResponse ScanForContent(VideoLibraryScanForContentRequest request);
	}

	[ServiceContract]
	internal interface XbmcSystem
	{

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemShutdownResponse Shutdown(XbmcSystemShutdownRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemSuspendResponse Suspend(XbmcSystemSuspendRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemHibernateResponse Hibernate(XbmcSystemHibernateRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemRebootResponse Reboot(XbmcSystemRebootRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemQuitResponse Quit(XbmcSystemQuitRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemIntrospectResponse Introspect(XbmcSystemIntrospectRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemVersionResponse Version(XbmcSystemVersionRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemGetVolumeResponse GetVolume(XbmcSystemGetVolumeRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemSetVolumeResponse SetVolume(XbmcSystemSetVolumeRequest request);

		[OperationContract]
		[WebInvoke(UriTemplate = "jsonrpc", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		XbmcSystemPingResponse Ping(XbmcSystemPingRequest request);
	}
}